package com.zbj.homemade.spring.lifecycle;

import com.zbj.homemade.spring.exception.BeansException;

/**
 * @program: principle
 * @description:
 *
 *      Spring关键接口 BeanPostProcessor
 *      有子类InstantiationAwareBeanPostProcessor,SmartInstantiationAwareBeanPostProcessor，子类接口作用（用于AOP）
 * @author: Yinn
 * @create: 2019-02-28 16:05
 **/
public interface BeanPostProcessor {

    /**
     * 此方法执行于再初始化（或定制初始化方法）之前的新生实例。
     */
    default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

    /**
     * 此方法执行于在初始化（或定制初始化方法）之后的实例。
     * 此方法也可以作用于FactoryBean实例 与FactoryBean创建的实例
     */
    default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}
